--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
URI structure/rules on reticulum
Necom (Profile): (2025-09-01 10:19:04 (UTC)) [edited]
I was reading the wikipedia page for percent encoding recently, as it is used by a protocol called Spartan (https://portal.mozz.us/spartan/spartan.mozz.us/?) and I wanted to design a protocol similar to Spartan, but for Reticulum. A Spartan request contains the percent encoded path, and I was thinking, maybe it's not neccesary? Percent encoding is used in URLs to avoid using characters that can't be used or have some special meaning. URIs on reticulum don’t don’t seem to always follow the same structure and rules, an example would be
“8a48ceafcf3b8c3439643e8dbd15daf3:/page/test percTest”, which does load despite having a space in it. So perhaps to be more consistent with Reticulum protocols like nomadnet my protocol should not use percent encoding in URIs, and if it doesn’t do that then maybe it also shouldn’t use it in requests? Perhaps that doesn’t make sense, I mean the server does need to be able to separate the path from the other components in the request which can’t be done using spaces unless you use something like percent encoding. Of course I could use something like CRLF but I quite like the feeling of simply running “nc sld.tld 300” and then typing in a Spartan request, typing a CRLF would not be very easy. I do realise as I’m writing now that it would be difficult to type the command anyways since it would have to have the destination in it which is very long and would have to be copy pasted, much like CRLF. Also CRLF wouldn’t even have to be pasted since you could run something like “echo -n ’path\r\nsize’ | nc destination” (obviously this wouldn’t work since netcat wouldn’t understand a reticulum destination but you could replace it with some other program made for reticulum).
Also, what about ://? Other protocols use it to let a computer know what protocol it should follow, but with reticulum the computer would already know the protocol as the app name would be included in the announce. Then again you might come across a link to a destination you don’t have the announce for, although I suppose after requesting a path you would get the app name and then the computer could open whichever program should be used for that protocol. Still, you might want to signal to a person seeing the link what protocol it is, I’ve seen someone use gemini://destination for a gemini implementation over reticulum (see the post about alternatives to nomadnet), but I’ve also seen a lot of people use lxmf@destination
So perhaps we should start using nomadnet@destination, gemini@destination, and spartan@destination? (Well actually I was thinking of calling it Sumer instead of Spartan since it wouldn’t be identical to Spartan, so sumer@destination)
first of all, nomadnet requests are hashes of the request path, which is why nothing breaks and the reason all characters are allowed.
LXMF uses @ because people are used to it on email or other communication platforms, but I think using URI is more logical. it would still be more logical to use protocol://path for pages and just follow the URI specs and because we would still need to have the path. of course, seeing as we're reinventing pretty much everything, we could also reivent the URI spec, but it seems to me that it is one of the only things we don't have to change.
also, please note that I abandoned Gemini/Reticulum( https://codeberg.org/int32/gemini-reticulum ) in favor of nomadnet nodes, even if I think we should change the markup protocol to gemtext, markdown or something new( https://github.com/markqvist/Reticulum/discussions/903 )
I think we should use gemtext, it leaves styling to the client which is useful to, for example, people who need high contrast to see well. Also I just like the line-oriented design, very simple and doesn't need a lot of state. I don't know exactly how the nomadnet protocol handles uploads, but maybe it would make sense to incorporate the modification specified in section 4 of the Spartan spec (an extra line type for uploads)? Or maybe not, Idk.
But an issue that I do know will have to be tackled if gemtext is to be used over nomadnet is link lines, how will a label be separated from a URL that contains a space? This is no issue for other protocols that don't allow spaces in URLs but for nomadnet it is.
Perhaps the label could be separated from the URL using some other character that is not allowed in URLs.
You could also just make a nomadnet client capable of rendering a bunch of different formats, like HTML, micron, markup, gemtext, bismark, etc. And then people could just use whatever format they want on their pages. Of course that might lead to a lot of pages looking very different from eachother and a user might have inconsistent influence over how pages render, which could perhaps be a somewhat jarring experience. Such an experience is kind of what I (and I think others) want to avoid by using gemtext, which leaves styling to the client.
Yeah, if we add support for another format, we will keep support for the other formats. however, I don't think we should support HTML, EVER.
I think styling is what makes the web fun though. Even just adding a background color or changing font colors would make a webpage comfy. I definitely wouldn't be surfing the web as much or learning about new things were it not for the creativity of the web so I think NomadNet should replicate this. Of course for those who don't really care, it should be an option to use client-side styling.
yeah, line-oriented is great, but in the format I made I made exceptions for bold, italic and verbatim, so it's not fully line-oriented.
nomadnet uses requests, which can have data as a map(or dictionary) which contains anything.
I'm pretty sure that micron doesn't allow file uploads, only text.
in my format, I used a meta tag which says that the page is a form, and then the presence of input fields is allowed, including file inputs. if you really wanted to use micron, support for file inputs could be somehow added.
that issue is quite interesting. one possibility would simply be to disallow spaces, but nah. we would need to either escape the spaces, or have some kind of separator that would not be allowed, and that's when the URI spec comes in!
Reticulum-adjacent URI formats are so inconsistent that there's basically no standard.
The only thing that matters is the hash (i.e. 428118bf70e715a89331ea928b250c05) and the rest is either meaningless fluff or a file path in the case of NomadNet.
Percent encoding is not used in the case of NomadNet because that hash is always a set length, and anything after the colon is the server's problem; no special encoding is really necessary there (except Micron's URL formatting to indicate to NomadNet that it is, in fact, a URL).
:// is avoided to prevent conflict with the URI RFC requring, at least in theory, that any schemes (i.e. http, ftp, mailto, etc.) be registered with the IANA.
Personally I'd love a scheme like NomadNet but with a # or something in front to be standardized, but I don't think anything that is going to happen in the near future.
I don't think we should let the fact that a registration is required stop us: I doubt that anyone will want nomadnet:// or reticulum://...
But yeah, it would be good to have a well-defined standard, I was more thinking of @ but # would work too.
Personally I like the form:
NomadNet page
r#428118bf70e715a89331ea928b250c05:/page/index.mu
LXMF and other Reticulum
r#2b4116b574e3a4f3d08b19ef017f6900:
Identity hash
i#5fba65415ca6551c04f6d192d298fd5e:
Because it's unique, has start/end indicators, and differentiates between addresses and identity hashes.
Notably it doesn't differentiate beyond that because there's not really any need to, and it only makes the form less standard.
I do like this idea, but I think the protocol should be specified, so instead of r# maybe nomad# and lxmf#(without the colon?)?